package uu.game.majiang.core;

/**
 * 东南西北，用来代表圈风、门风、方位等
 * 
 * @author uu
 * 
 * @version 2011-2-24 下午10:56:45
 */
public enum Feng {
    
    /**
     * 东(庄)
     */
    DONG("东", 41),
    
    /**
     * 南
     */
    NAN("南", 42),
    
    /**
     * 西
     */
    XI("西", 43),
    
    /**
     * 北
     */
    BEI("北", 44);
    
    private String name;
    private int    paihao;
    
    private Feng(String name, int paihao) {
        this.name = name;
        this.paihao = paihao;
    }
    
    /**
     * 得到另一个方位相对于自己的关系(上家、对家、下家、自己)，即另一个方位是自己的上家、对家、下家、自己。这是打牌时的顺序，
     * 因为麻将一开始摸牌时是顺时针，打牌时是逆时针。
     * 
     * @param other
     *            另一个方位
     * @return 相对关系
     */
    public RelativeFangwei getRelative(Feng other) {
        int x = paihao - other.paihao;
        assert x == -3 || x == -2 || x == -1 || x == 0 || x == 1 || x == 2 || x == 3;
        switch (x) {
            case 0 :
                return RelativeFangwei.ZIJI;
            case -1 :
            case 3 :
                return RelativeFangwei.SHANGJIA;
            case -2 :
            case 2 :
                return RelativeFangwei.DUIJIA;
            case -3 :
            case 1 :
                return RelativeFangwei.XIAJIA;
        }
        return null; // 不可能执行
    }
    
    /**
     * 四风位对应的风牌牌号，东41，南42，西43，北44
     * 
     * @return 风牌牌号
     */
    public int getPaihao() {
        return paihao;
    }
    
    /**
     * 名称，即东，南，西，北
     * 
     * @return 名称
     */
    public String getName() {
        return name;
    }
}
